package services.common;

import java.util.Date;
import java.util.List;
import java.util.Map;

import models.common.bean.CompanyAuditInfo;
import models.common.entity.t_company_audit_info;
import models.common.entity.t_info_type;
import services.base.BaseService;

import common.enums.AuditStatus;
import common.utils.DeleteImg;
import common.utils.Factory;
import common.utils.LoggerUtil;
import common.utils.PageBean;
import common.utils.ResultInfo;

import daos.common.CompanyAduitInfoDao;
import daos.common.CompanyInfoDao;

/**
 * 企业评估资料service
 * @author liaijun
 * @createDate 2017/04/17
 */
public class CompanyAuditInfoService extends BaseService<t_company_audit_info>{
	
	CompanyAduitInfoDao auditInfoDao = Factory.getDao(CompanyAduitInfoDao.class);
	
	CompanyInfoDao companyInfoDao = Factory.getDao(CompanyInfoDao.class);
	
	protected static InfoTypeService infoTypeService = Factory.getService(InfoTypeService.class);
	
	public CompanyAuditInfoService()
	{
		super.basedao = auditInfoDao;
	}
 
 
	/**
	 * 查询单个企业的评估资料
	 * @param currPage 当前页
	 * @param pageSize 每页显示多少调数据
	 * @param companyId 企业id
	 * @return
	 * @author liiajun
	 * @createDate 2017/04/17
	 */
	public PageBean<CompanyAuditInfo> pageOfComPanyAduitInfo(int currPage, int pageSize, long userId) {
		return auditInfoDao.pageOfComPanyAduitInfo(currPage, pageSize, userId);
	}


	/**
	 * 根据子类型id和companyInfoId查询，所有单个子类型的下面的所有资料Bean
	 * 
	 * @param id
	 * @param companyInfoId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年4月25日
	 */
	public List<CompanyAuditInfo>  findAuditInfoListByInfoIdAndUserId(
			long infoTypeId, long userId) {
		
		return auditInfoDao.findAuditInfoListByInfoIdAndUserId(infoTypeId,userId);
	}
	
	/**
	 * 根据子类型id和companyInfoId查询，所有单个子类型的下面的所有资料listMap
	 * 
	 * @param id
	 * @param companyInfoId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年4月25日
	 */
	public List<Map<String , Object>>  findAuditInfoListMapByInfoIdAndUserId(
			long infoTypeId, long userId) {
		
		return auditInfoDao.findAuditInfoListMapByInfoIdAndUserId(infoTypeId,userId);
	}


	/**
	 * 保存审核信息
	 * 
	 * @param company_audit_info
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年4月25日
	 */
	public ResultInfo updateCompanyAuditInfo(t_company_audit_info company_audit_info) {
		
		ResultInfo result = new ResultInfo();
		//boolean isFlag = userInfoDao.save(userInfo);
		boolean isFlag = auditInfoDao.save(company_audit_info);
		if (!isFlag) {
			result.code = -1;
			result.msg= "审核企业评估信息失败";
			LoggerUtil.error(true, "审核企业评估信息失败");
			return result;
		}
		result.code = 1;
		result.msg= "审核企业评估信息成功";
		
		return result;
	}
		
	
	/**
	 * 查询所有子类型，包括条件查询
	 * 
	 * @param currPage
	 * @param pageSize
	 * @param infoType
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年4月24日
	 */
	public PageBean<CompanyAuditInfo> pageOfAuditiInfoByInfoType(int currPage,
			int pageSize, String infoType) {

		return auditInfoDao.pageOfAuditInfoByInfoType(currPage,pageSize,infoType);
	}


	/**
	 * 根据子类型id和企业id查到单个的企业评审资料，是一对一的关系，所以返回一个对象
	 * @param infoTypeId
	 * @param companyInfoId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年5月3日
	 */
	public t_company_audit_info findAuditInfoListByInfoIdAnduserIdForOne(
			long infoTypeId, long userId) {
		
		return auditInfoDao.findAuditInfoListByInfoIdAndUserIdForOne(infoTypeId,userId);
	}
	
	/**
	 *  查询不定型的资料信息
	 * @param companyId 企业id
	 * @param status 当前资料的审核状态
	 * @return  List<t_company_audit_info>
	 * @author liaijun
	 * @createDate 2017年5月12
	 */
	 public List<t_company_audit_info> findComAuditByColumn(long companyId,int status){
		return auditInfoDao.findComAuditByColumn(companyId, status);
	 }


	 /**
	  * 保存审核信息，返回bean
	  * @param company_audit_info
	  * @return
	  * @author zhiliang.lan
	  * @createDate 2017年6月6日
	  */
	public ResultInfo updateCompanyAuditInfo(CompanyAuditInfo company_audit_info) {
		ResultInfo result = new ResultInfo();
		//boolean isFlag = userInfoDao.save(userInfo);
		boolean isFlag = auditInfoDao.save(company_audit_info);
		if (!isFlag) {
			result.code = -1;
			result.msg= "审核企业评估信息失败";
			
			return result;
		}
		result.code = 1;
		result.msg= "审核企业评估信息成功";
		
		return result;
	}


	/**
	 * 根据企业id和infoTypeId删除该企业上传的资料，在t_company_audit_info里面
	 * @param id
	 * @param childInfoId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年6月9日
	 */
	public int delInfoByUserIdAndInfoTypeId(long userId, long childInfoId) {
		
		return auditInfoDao.delInfoByUserIdAndInfoTypeId(userId, childInfoId);
	}


	/**
	 * 删除，根据主键
	 * @param childInfoId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年6月13日
	 */
	public int delInfoByInfoTypeId(long childInfoId) {

		return auditInfoDao.delInfoByInfoTypeId(childInfoId);
	}


	/**
	 * 根据企业id和二级类型查询记录，只能查出一条
	 * 
	 * @param companyInfoId
	 * @param secondInfoTypeId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年6月14日
	 */
	public t_company_audit_info findCompanyAuditInfoByUserIdAndInfoTypeId(
			long userId, long secondInfoTypeId) {
		
		return auditInfoDao.findCompanyAuditInfoByUserIdAndInfoTypeId(userId, secondInfoTypeId);
	}


	/**
	 * 根据审核资料id查找
	 * 
	 * @param companyAuditInfoId
	 * @return
	 * @author zhiliang.lan
	 * @createDate 2017年7月4日
	 */
	public t_company_audit_info findAuditInfoById(long companyAuditInfoId) {
		
		return auditInfoDao.findByID(companyAuditInfoId);
	}
	

	/**
	 * 删除文件
	 *
	 * @param companyAuditInfo  实体t_company_audit_info
	 * @return
	 * @author xiaojun
	 *@version 2017-7-27
	 */
	public 	boolean  deleteImg(	t_company_audit_info companyAuditInfo){
		if(companyAuditInfo == null){
			return false;
		}
		boolean delete =false;
		if(companyAuditInfo.pic_addr != null){
			 delete = DeleteImg.deleteImg(companyAuditInfo.pic_addr);
		}
		if(companyAuditInfo.info_addr != null){
			 delete = DeleteImg.deleteImg(companyAuditInfo.info_addr);
		}
		
		return delete;
	}


	/**
	 * 企业评估资料上传保存
	 * 
	 * @param userId
	 * @param secondInfoTypeId
	 * @param suffixName
	 * @param fileName
	 * @return
	 * @author zhiliang.lan
	 * @param secondInfoTypeId2 
	 * @param staticFileName 
	 * @createDate 2017年8月8日
	 */
	public ResultInfo uploadCompanyAuditInfo(long userId, long firstInfoTypeId,
			 long secondInfoTypeId, String suffixName, String fileName, String staticFileName) {
		
		ResultInfo result = new ResultInfo();
		
		//查找一级类型
		//t_info_type firstInfoType = infoTypeService.findInfoTypeByPkId(firstInfoTypeId);
		t_info_type firstInfoType = infoTypeService.findInfoTypeById(firstInfoTypeId);
		if(null == firstInfoType){
			result.code = -1;
			result.msg = "查找一级类型失败";
			
			return result;
		}
		
		//保存此上传文件记录，先查询是否已经存在此条记录，已存在则追加数据，不存在则新建记录
		t_company_audit_info companyAuditInfo =	findCompanyAuditInfoByUserIdAndInfoTypeId(userId, secondInfoTypeId);
		if(null == companyAuditInfo){
			
			t_company_audit_info companyAuditInfo2 = new t_company_audit_info();
			
			companyAuditInfo2.info_type_id = secondInfoTypeId;
			companyAuditInfo2.user_id = userId;
			
			//图片文件和非图片文件分开保存
			if(suffixName.toLowerCase().equals("jpg") || suffixName.toLowerCase().equals("jpeg") || 
					suffixName.toLowerCase().equals("png") || suffixName.toLowerCase().equals("gif")){
				companyAuditInfo2.pic_addr = staticFileName;
				companyAuditInfo2.pic_name = fileName;
			}else {
				companyAuditInfo2.info_name = fileName;
				companyAuditInfo2.info_addr = staticFileName;
			}
			//保存其他信息
			companyAuditInfo2.setAudit_status(AuditStatus.WAIT_AUDIT);
			companyAuditInfo2.credit_score = 0;
			companyAuditInfo2.type = firstInfoType.type;
			//保存信息
			ResultInfo result2 = updateCompanyAuditInfo(companyAuditInfo2);
			if(result2.code < 1){
				result.code = -1;
				result.msg = "保存资料失败";
				return result;
			}
		}else {
			
			if(suffixName.toLowerCase().equals("jpg") || suffixName.toLowerCase().equals("jpeg") || 
					suffixName.toLowerCase().equals("png") || suffixName.toLowerCase().equals("gif")){
				
				if(null == companyAuditInfo.pic_name){
					companyAuditInfo.pic_name = fileName;
				}else {
					//追加的文件，名字连到后面
					String str = companyAuditInfo.pic_name+","+fileName;
					companyAuditInfo.pic_name = str;
				}
				
				if(null == companyAuditInfo.pic_addr){
					companyAuditInfo.pic_addr = staticFileName;
				}else {
					//追加的文件，地址连在后面
					String str2 = companyAuditInfo.pic_addr+","+staticFileName;
					companyAuditInfo.pic_addr = str2;
				}
				
			}else {
				
				if(null == companyAuditInfo.info_name){
					companyAuditInfo.info_name = fileName;
				}else {
					//追加的文件，名字连到后面
					String str3 = companyAuditInfo.info_name+","+fileName;
					companyAuditInfo.info_name = str3;
				}
				
				if(null == companyAuditInfo.info_addr){
					companyAuditInfo.info_addr = staticFileName;
				}else {
					//追加的文件，地址连在后面
					String str4 = companyAuditInfo.info_addr+","+staticFileName;
					companyAuditInfo.info_addr = str4;
				}
			}
			
			//更新详细信息的信息，状态置未待审核
			companyAuditInfo.setAudit_status(AuditStatus.WAIT_AUDIT);
			companyAuditInfo.time = new Date();
			ResultInfo result2 = updateCompanyAuditInfo(companyAuditInfo);
			if(result2.code < 1){
				result.code = -1;
				result.msg = "保存资料失败";
				return result;
			}
		}
		
		result.code = 1;
		result.msg = "上传成功";
		
		return result;
	}

	/**
	 * 查看历史记录评估资料
	 * @param user_id
	 * @return
	 * @author binghui.zhou
	 * @createDate 2017年9月5日
	 */
	public List<Map<String, Object>> queryHistoryDatum(long user_id) {
		
		return auditInfoDao.queryHistoryDatum(user_id);
	}
	
}
